﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SMP_QuanLySV.DAL;
using SMP_QuanLySV.BLL;

namespace SMP_QuanLySV.Presentation
{
    public partial class UC_Nganh : UserControl
    {
        Form parent;
        BLLNganh BLL = new BLLNganh();
        BLLKhoa K = new BLLKhoa();
        List<Khoa> listKhoa;

        int selectedIndex = -1;
        NganhHoc selectedInstance = null;
        string trangThai = "";

        // constructor
        public UC_Nganh(Form parent)
        {
            InitializeComponent();
            this.parent = parent;
        }



        void setDefaultSelectedInstance()
        {
            selectedIndex = 0;
            selectedInstance = BLL.retrieveByIndex(selectedIndex);
            // update du lieu cho phu hop voi selected row
            updateTextboxes(selectedInstance);
        }

        // update cac textboxes cho phu hop voi selected row trong datagridview
        void updateTextboxes(NganhHoc temp)
        {
            txtNganhID.Text = temp.NganhID;
            txtTenNganh.Text= temp.TenNganh;
            for (int i = 0; i < listKhoa.Count; i++)
                if (listKhoa[i].KhoaID == temp.KhoaID)
                {
                    cbxMaKhoa.SelectedIndex = i;
                    break;
                }
        }

        // set thuoc tinh readOnly/enabled cho tat ca cac controls ve 1 gia tri
        void setReadOnlyAll(bool val)
        {
            txtNganhID.ReadOnly = val;
            txtTenNganh.ReadOnly = val;
        }

        // cho thuoc tinh text cua cac textboxes tro thanh ""
        private void clearTextboxes()
        {
            txtNganhID.Text = "";
            txtTenNganh.Text = "";
        }

        // xy ly su kien click chon 1 cell khac trong datagridview
        // --> lay row cua cell do lam selectedIndex va SelectedInstance bang row dc chon
        private void dataGridViewX1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            selectedIndex = dataGridViewX1.SelectedCells[0].RowIndex;
            selectedInstance = BLL.retrieveByIndex(selectedIndex);
            updateTextboxes(selectedInstance);
        }

        void setBtnEnabled1(bool val)
        {
            btnThem.Enabled = val;
            btnXoa.Enabled = val;
            btnSua.Enabled = val;
        }

        void setBtnEnabled2(bool val)
        {
            btnLuu.Enabled = val;
            btnHuy.Enabled = val;
        }

        private void UC_Nganh_Load(object sender, EventArgs e)
        {
            // nap du lieu cho datagridview
            dataGridViewX1.DataSource = BLL.returnListNganh();
            dataGridViewX1.Columns[3].Visible = false;

            // nap du lieu cho combobox
            cbxMaKhoa.DataSource = K.returnListKhoa();
            listKhoa = K.returnListKhoa();
            cbxMaKhoa.DisplayMember = "TenKhoa";
            cbxMaKhoa.ValueMember = "KhoaID";
            cbxMaKhoa.SelectedIndex = 0;

            // mac dinh dong dau tien trong datagridview duoc chon (selected)
            setDefaultSelectedInstance();

            setReadOnlyAll(true);
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            clearTextboxes();
            setReadOnlyAll(false);
            setBtnEnabled2(true);
            setBtnEnabled1(false);

            // set trang thai ve che do them moi
            trangThai = "dang_them";
            dataGridViewX1.Enabled = false;
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (txtNganhID.Text == "")
            {
                MessageBox.Show("Bạn phải chọn ngành nào cần xóa", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                DialogResult result = MessageBox.Show("Bạn có chắc muốn xóa ngành này không?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
                if (result == DialogResult.Yes)
                {
                    // xoa doi tuong va update lai view
                    string NganhIDCanDelete = txtNganhID.Text;
                    NganhHoc NganhCanDelete = BLL.retrieveByID(NganhIDCanDelete);
                    BLL.deleteNganh(NganhCanDelete);

                    dataGridViewX1.DataSource = BLL.returnListNganh();
                    setDefaultSelectedInstance();
                }
            }
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            setReadOnlyAll(false);
            txtNganhID.ReadOnly= true;

            // set trang thai ve che do sua
            trangThai = "dang_sua";
            setBtnEnabled1(false);
            setBtnEnabled2(true);
            dataGridViewX1.Enabled = false;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            // disable toan bo cac textboxes
            setReadOnlyAll(true);

            // kiem tra tinh hop le cua du lieu nhap vao
            NganhHoc tg = new NganhHoc();
            tg.NganhID = txtNganhID.Text;
            tg.TenNganh = txtTenNganh.Text;
            tg.KhoaID = cbxMaKhoa.SelectedValue.ToString();

            if (BLL.kiemTra(tg))
            {
                // update csdl va view
                if (trangThai == "dang_sua")
                {
                    BLL.updateNganh(tg);
                }
                if (trangThai == "dang_them")
                {
                    BLL.insertNganh(tg);
                }
                dataGridViewX1.DataSource = BLL.returnListNganh();
                dataGridViewX1.Enabled = true;
                // disable cac nut Luu va Huy
                setBtnEnabled2(false);
                setBtnEnabled1(true);
                setDefaultSelectedInstance();
            }
            else
            {
                MessageBox.Show("Bạn nhập sai thông tin", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                btnHuy_Click(sender, e);
            }
            UC_Nganh_Load(sender, e);  
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            // update lai view va buttons
            setDefaultSelectedInstance();
            setReadOnlyAll(true);
            dataGridViewX1.DataSource = BLL.returnListNganh();
            setBtnEnabled2(false);
            setBtnEnabled1(true);

            dataGridViewX1.Enabled = true;
        }


    }
}
